home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / net / IDN.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.8 KB  |  228 lines

  1. package java.net;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.security.AccessController;
  6. import java.text.ParseException;
  7. import sun.net.idn.Punycode;
  8. import sun.net.idn.StringPrep;
  9. import sun.text.normalizer.UCharacterIterator;
  10.  
  11. public final class IDN {
  12.    public static final int ALLOW_UNASSIGNED = 1;
  13.    public static final int USE_STD3_ASCII_RULES = 2;
  14.    private static final String ACE_PREFIX = "xn--";
  15.    private static final int ACE_PREFIX_LENGTH = "xn--".length();
  16.    private static final int MAX_LABEL_LENGTH = 63;
  17.    private static StringPrep namePrep = null;
  18.  
  19.    public static String toASCII(String var0, int var1) {
  20.       int var2 = 0;
  21.       int var3 = 0;
  22.       StringBuffer var4 = new StringBuffer();
  23.  
  24.       while(var2 < var0.length()) {
  25.          var3 = searchDots(var0, var2);
  26.          var4.append(toASCIIInternal(var0.substring(var2, var3), var1));
  27.          var2 = var3 + 1;
  28.          if (var2 < var0.length()) {
  29.             var4.append('.');
  30.          }
  31.       }
  32.  
  33.       return var4.toString();
  34.    }
  35.  
  36.    public static String toASCII(String var0) {
  37.       return toASCII(var0, 0);
  38.    }
  39.  
  40.    public static String toUnicode(String var0, int var1) {
  41.       int var2 = 0;
  42.       int var3 = 0;
  43.       StringBuffer var4 = new StringBuffer();
  44.  
  45.       while(var2 < var0.length()) {
  46.          var3 = searchDots(var0, var2);
  47.          var4.append(toUnicodeInternal(var0.substring(var2, var3), var1));
  48.          var2 = var3 + 1;
  49.          if (var2 < var0.length()) {
  50.             var4.append('.');
  51.          }
  52.       }
  53.  
  54.       return var4.toString();
  55.    }
  56.  
  57.    public static String toUnicode(String var0) {
  58.       return toUnicode(var0, 0);
  59.    }
  60.  
  61.    private IDN() {
  62.    }
  63.  
  64.    private static String toASCIIInternal(String var0, int var1) {
  65.       boolean var2 = isAllASCII(var0);
  66.       StringBuffer var3;
  67.       if (!var2) {
  68.          UCharacterIterator var4 = UCharacterIterator.getInstance(var0);
  69.  
  70.          try {
  71.             var3 = namePrep.prepare(var4, var1);
  72.          } catch (ParseException var8) {
  73.             throw new IllegalArgumentException(var8);
  74.          }
  75.       } else {
  76.          var3 = new StringBuffer(var0);
  77.       }
  78.  
  79.       boolean var10 = (var1 & 2) != 0;
  80.       if (var10) {
  81.          for(int var5 = 0; var5 < var3.length(); ++var5) {
  82.             char var6 = var3.charAt(var5);
  83.             if (!isLDHChar(var6)) {
  84.                throw new IllegalArgumentException("Contains non-LDH characters");
  85.             }
  86.          }
  87.  
  88.          if (var3.charAt(0) == '-' || var3.charAt(var3.length() - 1) == '-') {
  89.             throw new IllegalArgumentException("Has leading or trailing hyphen");
  90.          }
  91.       }
  92.  
  93.       if (!var2 && !isAllASCII(var3.toString())) {
  94.          if (startsWithACEPrefix(var3)) {
  95.             throw new IllegalArgumentException("The input starts with the ACE Prefix");
  96.          }
  97.  
  98.          try {
  99.             var3 = Punycode.encode(var3, (boolean[])null);
  100.          } catch (ParseException var7) {
  101.             throw new IllegalArgumentException(var7);
  102.          }
  103.  
  104.          var3 = toASCIILower(var3);
  105.          var3.insert(0, "xn--");
  106.       }
  107.  
  108.       if (var3.length() > 63) {
  109.          throw new IllegalArgumentException("The label in the input is too long");
  110.       } else {
  111.          return var3.toString();
  112.       }
  113.    }
  114.  
  115.    private static String toUnicodeInternal(String var0, int var1) {
  116.       Object var2 = null;
  117.       boolean var4 = isAllASCII(var0);
  118.       StringBuffer var3;
  119.       if (!var4) {
  120.          try {
  121.             UCharacterIterator var5 = UCharacterIterator.getInstance(var0);
  122.             var3 = namePrep.prepare(var5, var1);
  123.          } catch (Exception var9) {
  124.             return var0;
  125.          }
  126.       } else {
  127.          var3 = new StringBuffer(var0);
  128.       }
  129.  
  130.       if (startsWithACEPrefix(var3)) {
  131.          String var10 = var3.substring(ACE_PREFIX_LENGTH, var3.length());
  132.  
  133.          try {
  134.             StringBuffer var6 = Punycode.decode(new StringBuffer(var10), (boolean[])null);
  135.             String var7 = toASCII(var6.toString(), var1);
  136.             if (var7.equalsIgnoreCase(var3.toString())) {
  137.                return var6.toString();
  138.             }
  139.          } catch (Exception var8) {
  140.          }
  141.       }
  142.  
  143.       return var0;
  144.    }
  145.  
  146.    private static boolean isLDHChar(int var0) {
  147.       if (var0 > 122) {
  148.          return false;
  149.       } else {
  150.          return var0 == 45 || 48 <= var0 && var0 <= 57 || 65 <= var0 && var0 <= 90 || 97 <= var0 && var0 <= 122;
  151.       }
  152.    }
  153.  
  154.    private static int searchDots(String var0, int var1) {
  155.       int var2;
  156.       for(var2 = var1; var2 < var0.length(); ++var2) {
  157.          char var3 = var0.charAt(var2);
  158.          if (var3 == '.' || var3 == 12290 || var3 == 'Ôºé' || var3 == 'ÔΩ°') {
  159.             break;
  160.          }
  161.       }
  162.  
  163.       return var2;
  164.    }
  165.  
  166.    private static boolean isAllASCII(String var0) {
  167.       boolean var1 = true;
  168.  
  169.       for(int var2 = 0; var2 < var0.length(); ++var2) {
  170.          char var3 = var0.charAt(var2);
  171.          if (var3 > 127) {
  172.             var1 = false;
  173.             break;
  174.          }
  175.       }
  176.  
  177.       return var1;
  178.    }
  179.  
  180.    private static boolean startsWithACEPrefix(StringBuffer var0) {
  181.       boolean var1 = true;
  182.       if (var0.length() < ACE_PREFIX_LENGTH) {
  183.          return false;
  184.       } else {
  185.          for(int var2 = 0; var2 < ACE_PREFIX_LENGTH; ++var2) {
  186.             if (toASCIILower(var0.charAt(var2)) != "xn--".charAt(var2)) {
  187.                var1 = false;
  188.             }
  189.          }
  190.  
  191.          return var1;
  192.       }
  193.    }
  194.  
  195.    private static char toASCIILower(char var0) {
  196.       return 'A' <= var0 && var0 <= 'Z' ? (char)(var0 + 97 - 65) : var0;
  197.    }
  198.  
  199.    private static StringBuffer toASCIILower(StringBuffer var0) {
  200.       StringBuffer var1 = new StringBuffer();
  201.  
  202.       for(int var2 = 0; var2 < var0.length(); ++var2) {
  203.          var1.append(toASCIILower(var0.charAt(var2)));
  204.       }
  205.  
  206.       return var1;
  207.    }
  208.  
  209.    static {
  210.       Object var0 = null;
  211.  
  212.       try {
  213.          InputStream var3;
  214.          if (System.getSecurityManager() != null) {
  215.             var3 = (InputStream)AccessController.doPrivileged(new 1());
  216.          } else {
  217.             var3 = StringPrep.class.getResourceAsStream("uidna.spp");
  218.          }
  219.  
  220.          namePrep = new StringPrep(var3);
  221.          var3.close();
  222.       } catch (IOException var2) {
  223.          assert false;
  224.       }
  225.  
  226.    }
  227. }
  228.